其他
Hango 开源解读:云原生网关实践,为何要选择 Envoy ?
网关是“镇守”互联网应用门户的关键流量代理软件。进入云原生时代,行业用户除了需要 API 网关提供请求代理、熔断限流、审计监控等常规能力外,更多的开始关注云原生兼容性(容器、服务网格等),支撑场景的多样性(七层负载均衡、Ingress、Serverless 网关等),以及更好的性能稳定性。网易在 2018 年选型云原生标准数据面软件 Envoy 构建了新一代 API 网关,满足了云原生场景需求,承担了网易百亿级互联网业务流量。本文从网易数帆开源云原生 API 网关 Hango 的选型入手,对云原生网关选型为何选择 Envoy 进行了较为全面的解读。
背景
起源
背书与潜力
富能力
原生功能丰富:相较于 Nginx、HAProxy 提供流量代理所需的基本功能(更多高级功能通常需要通过扩展插件方式实现或购买商业版),Envoy 本身基于 C++ 已经实现了相当多代理所需高级功能,如高级负载均衡、熔断、限流、故障注入、流量复制等等。更为丰富的功能不仅让 Envoy 天生就可以用于多种场景,原生 C++ 的实现相较于经过扩展的实现方式性能优势更为明显。 易观察:相比于 Nginx、HAProxy 等传统代理软件,Envoy 具备更好的可观察性,包括灵活可定制的日志,丰富的指标监控,原生的多种分布式跟踪协议支持等等。 自主可控:Envoy 的社区完全开放,不存在对应的商业版本,所以不用担心部分高级功能会被锁死在类似开源对应的商业版当中。同时,Envoy 社区非常活跃,在 Envoy 使用过程中的问题或者新的功能需求向社区提出后都可以得到很快的反馈。 动态配置:xDS 协议的提出使得 Envoy 几乎所有的配置都可以动态的下发、加载和生效,而无需重新加载进程。并且 xDS 协议已经成为了构建通用数据面接口协议(UDPA)的基础。 易扩展:Envoy 提供了L4/L7 Filter机制,可以让开发者在不侵入 Envoy 主干的前提下在各个层级对 Envoy 进行扩展和增强。不止于此,Envoy 的 WebAssembly 多语言扩展沙箱,可以支持使用 C++、Golang、JS 等语言扩展能力。 多协议:Envoy 支持代理多种 L7 协议数据,包括 HTTP,Kafka,gRPC,Dubbo,MongoDB 等等。因为 Envoy 所有的协议解析和治理都是使用 Filter 来实现的,此类多协议治理能力其实也是构建在 Envoy 强大可扩展性上的,基本上每一种协议代理能力都对应一个 L4 Filter。
高性能
行业趋势
F5 —— Envoy 作为 F5 新一代网络代理软件选型,新研发的 Aspen mesh 使用 Envoy 作为新的代理软件:https://aspenmesh.io/ 开源 API 网关 —— 开源项目 Gloo, Contour, Ambassador 均采用 Envoy 作为代理软件 云原生基础设施 —— Envoy 是云原生基础设施服务网格 Istio(由 Google、IBM 和 Lyft 联合开发)的核心代理软件,国内阿里巴巴、腾讯、百度、华为、美团、网易等互联网企业均基于此构建大规模分布式微服务体系,并使用 Envoy 作为数据流量代理
eBay —— 使用 Envoy 替换硬件负载均衡,并提供了测试数据:https://envoyconna18.sched.com/event/HDRr/running-envoy-as-an-edge-proxy-bala-madhaven-ebay-qiu-yu-ebay Redit —— 使用 Envoy 作为其流量代理,并进一步替换 HAProxy 和 AWS ALBs:https://www.infoq.com/news/2019/01/envoy-reddit/ Dropbox —— 从 Nginx 迁移到 Envoy:https://dropbox.tech/infrastructure/how-we-migrated-dropbox-from-nginx-to-envoy 阿里巴巴 —— 基于 Envoy 代理软件实现阿里集团云原生基础设施:选自《不一样的双11技术:阿里巴巴经济体云原生实践》一书 腾讯 —— 基于 Envoy 代理软件实现腾讯云原生基础设施:https://www.infoq.cn/article/eeggylsq4-ttgc4mklwi 美团 —— 基于 Envoy 代理软件实现美团云原生基础设施:https://tech.meituan.com/2019/12/12/meituan-octo.html